package com.tian.tianid.ipc


class Example2 {

    /**
     *  标准委托 之 延迟属性lazy
     *
     *  1、第一次调用 get() 会执行已传递给 lazy() 的 lambda 表达式并记录结果， 后续调用 get() 只是返回记录的结果。
     *  2、默认情况下，对于 lazy 属性的求值是同步锁的（synchronized）：该值只在一个线程中计算，并且所有线程会看到相同的值。
     *     如果初始化委托的同步锁不是必需的，这样多个线程可以同时执行，那么将 LazyThreadSafetyMode.PUBLICATION 作为参数传递给 lazy() 函数。
     *     而如果你确定初始化将总是发生在与属性使用位于相同的线程， 那么可以使用 LazyThreadSafetyMode.NONE 模式：它不会有任何线程安全的保证以及相关的开销。
     */
    val lazyValue: String by lazy {
        println("computed ${Thread.currentThread().name}")
        "hello"
    }
}


fun main() {
    val e = Example2()
    println(e.lazyValue)
}
